<template>
	<view class="login-container">
		<view class="login-box">
			<view class="login-title">
				<text>登录</text>
			</view>
			<view class="input-group">
				<uni-easyinput v-model="loginForm.userAccount" placeholder="请输入学工号" />
			</view>
			<view class="input-group">
				<uni-easyinput v-model="loginForm.userPassword" type="password" placeholder="请输入密码" />
			</view>
			<button class="login-btn" type="primary" @click="handleLogin">登录</button>
		</view>
	</view>
</template>

<script setup>
import { reactive, onMounted } from 'vue'
import { LoginReq } from '@/modules/Login.js'
import { http } from '@/utils/http.js'
import { TokenInfo } from '@/datas/satokenInfo.js'
import Result from '@/datas/result.js'
import { User } from '@/datas/user.js'

const loginForm = reactive({
	userAccount: '',
	userPassword: ''
})

// 自动登录检查
onMounted(async () => {
	try {
		// 获取存储的token信息
		const tokenInfo = uni.getStorageSync('tokenInfo')
		if (tokenInfo && tokenInfo.tokenValue) {
			// 使用token获取用户信息
			const userResult = await http.get('/user/get/login')
			
			if (userResult.message === 'ok' && userResult.data) {
				// 创建用户实例并存储
				console.log('自动登录成功，用户信息：', userResult.data)
				const userInfo = new User(userResult.data)
				uni.setStorageSync('userInfo', userInfo)
				
				// 打印用户数据
				console.log('自动登录成功，用户信息：', userInfo)
				
				// 直接跳转到主页
				uni.reLaunch({
					url: '/pages/home/index'
				})
			} else {
				// 登录态过期
				uni.showToast({
					title: '登录态过期',
					icon: 'none',
					duration: 2000
				})
			}
		}
	} catch (error) {
		console.error('自动登录失败：', error)
	}
})

const handleLogin = async () => {
	// 表单验证
	if (!loginForm.userAccount || !loginForm.userPassword) {
		uni.showToast({
			title: '请填写完整信息',
			icon: 'none'
		})
		return
	}
	
	// 密码长度验证
	if (loginForm.userPassword.length < 8) {
		uni.showToast({
			title: '密码长度必须大于等于8位',
			icon: 'none'
		})
		return
	}
	
	try {
		const loginReq = new LoginReq(loginForm.userAccount, loginForm.userPassword)
		const result = await http.post('/user/login', loginReq)
		// 处理返回结果
		if (result.message === 'ok') {
			const tokenInfo = new TokenInfo(result.data)
			
			if (tokenInfo.isTokenValid()) {
				// 存储token信息
				uni.setStorageSync('tokenInfo', tokenInfo)
				
				// 获取用户信息
				try {
					const userResult = await http.get('/user/get/login')
					console.log("登录结果：",userResult.data)
					if (userResult.message === 'ok' && userResult.data) {
						// 创建用户实例并存储
						const userInfo = new User(userResult.data)
						uni.setStorageSync('userInfo', userInfo)
						
						// 打印用户数据
						console.log('用户信息：', userInfo)
						
						uni.showToast({
							title: '登录成功',
							icon: 'success'
						})
						
						// 获取用户信息成功后跳转到主页
						uni.reLaunch({
							url: '/pages/home/index'
						})
					} else {
						uni.showToast({
							title: '获取用户信息失败',
							icon: 'none'
						})
					}
				} catch (userError) {
					uni.showToast({
						title: '获取用户信息失败：' + userError.message || "网络错误",
						icon: 'none'
					})
				}
			} else {
				uni.showToast({
					title: 'Token无效',
					icon: 'none'
				})
			}
		} else {
			uni.showToast({
				title: result.message || '登录失败',
				icon: 'none'
			})
		}
	} catch (error) {
		uni.showToast({
			title: '登录失败：' + error.message || "网络错误",
			icon: 'none'
		})
	}
}
</script>

<style>
	.login-container {
		display: flex;
		justify-content: center;
		align-items: center;
		height: 100vh;
		background-color: #f5f5f5;
	}
	
	.login-box {
		width: 80%;
		padding: 40rpx;
		background-color: #fff;
		border-radius: 20rpx;
		box-shadow: 0 2rpx 12rpx 0 rgba(0, 0, 0, 0.1);
	}
	
	.login-title {
		text-align: center;
		font-size: 36rpx;
		font-weight: bold;
		margin-bottom: 40rpx;
	}
	
	.input-group {
		margin-bottom: 30rpx;
	}
	
	.login-btn {
		margin-top: 40rpx;
		width: 100%;
	}
</style>
